package com.tgb.SpringActivemq.controller;

import java.util.HashMap;
import java.util.Map;

import javax.annotation.Resource;

import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.ResponseBody;

import com.tgb.SpringActivemq.mq.producer.queue.QueueSender;
import com.tgb.SpringActivemq.mq.producer.topic.TopicSender;
import com.tgb.SpringActivemq.test.JMSProducer;
import com.tgb.SpringActivemq.test.JMSProducerTest;

/**
 * 
 * @author liang
 * @description controller测试
 */
@Controller
@RequestMapping("/activemq")
public class ActivemqController {
	/**
	 * JMSProducer 可以设置成全局的静态变量，只需实例化一次即可使用, 禁止循环重复实例化JMSProducer(因为其内部存在一个线程池)
	 * 支持openwire协议的默认连接为 tcp://localhost:61616，支持stomp协议的默认连接为tcp://localhost:61613。
	 *  tcp和nio的区别 
	 *  nio://localhost:61617 以及 tcp://localhost:61616均可在 activemq.xml配置文件中进行配置
	 */
	public static JMSProducer producer = new JMSProducer("tcp://192.168.70.130:61616", "admin", "admin");
	@Resource
	QueueSender queueSender;
	@Resource
	TopicSender topicSender;

	/**
	 * 发送消息到队列 Queue队列：仅有一个订阅者会收到消息，消息一旦被处理就不会存在队列中
	 * 
	 * @param message
	 * @return String
	 */
	@ResponseBody
	@RequestMapping("queueSender")
	public String queueSender(@RequestParam("message") String message) {
		String opt = "";
		try {
			  Map<String, Object> map = new HashMap<String, Object>();  
	          map.put("message", message);
	          String queueName="test";
	          producer.send(queueName, map);  
			// queueSender.send("test.queue", message);
			opt = "suc";
		} catch (Exception e) {
			opt = e.getCause().toString();
		}
		return opt;
	}

	/**
	 * 发送消息到主题 Topic主题 ：放入一个消息，所有订阅者都会收到 这个是主题目的地是一对多的
	 * 
	 * @param message
	 * @return String
	 */
	@ResponseBody
	@RequestMapping("topicSender")
	public String topicSender(@RequestParam("message") String message) {
		String opt = "";
		try {
			topicSender.send("test.topic", message);
			opt = "suc";
		} catch (Exception e) {
			opt = e.getCause().toString();
		}
		return opt;
	}

}
